macOS测试方法
- 运行
test/test-html-print/test-html-print.js调整代码中的format参数为A4或者A5测试不同的样例 A5html文件为test-*.html,A4html文件为test.html- Chronium打印,打开
node_modules/puppeteer/.local-chromium/mac-xxxxxx/chrome-mac/Chromium.app并打开对应的 html文件,通过设置横版竖版,以及代码中的打印边距,勾选打印背景,去掉页眉页脚,打印出结果 - Chrome打印,打开最新版的Chrome(最好是79以上版本更接近Chromium的内容),打开对应html,通过设置横版竖版,以及代码中的打印边距,勾选打印背景,去掉页眉页脚,打印出结果
 
测试结果说明
puppeteer 2.0
对于test.html A4 打印说明
- 这个文件是原先在某个环境出现过角标割字的案例,在这个环境下没有复现,都正常
 puppeteer2.0生成的test.html-A4.pdf与chrome打印的test.html-A4-chrome-print.pdf二进制完全一样puppeteer2.0生成的test.html-A4.pdf与对于版本的chromium打印的test.html-A4-chromium-print.pdf有少量的字节顺序不一样,但pdf显示结果看起来无差别
对于test-simple.html A5 打印说明
- 这个文件一直有行割字的问题
 puppeteer2.0生成的test-simple.html-A5.pdf有割字现象,与浏览器打印的有换行和少量字节不一致的差异- chrome打印的
test-simple.html-A5-chrome-print.pdf与puppeteer2.0对于版本的chromium打印的test-simple.html-A5-chromium-print.pdf二进制完全一致,且pdf显示正常 
puppeteer 2.1.1
test.html,test-simple.html测试结果跟puppeteer 2.0一致对于
test-complex测试结果puppeteer生成结果:第5题标签割字,第16题选项割字,第17题答案标签割字,第18题解析标签割字,第19题答案图片和文字割字,第20、21题答案标签割字,第27题答案文字割字,第29题解析标签割字,第31题答案文字割字,第32题解析标签割字- chrome打印结果:第7题标签和题目不在一页,第17题答案标签割字,第18题解析标签割字,第19题图形和文字割字,第21题答案标签割字,第27题标签和题目不在一页文字割字,第29题图形割字,第30题标签割字,第31题图形割字,第34题答案标签割字
 
结论
- chrome打印本身也不行,那从工具的角度来解决问题就行不通了
 - 从另一个方面来看,就是我们写的页面有问题或者说可以从页面本身来解决
 
解决办法
前期有过一些其他的探索,比如 定位puppeteer, 也尝试过换一些其他的方案,都在向工具方面探索,也提过几个issue未解决,最后直接被上面的chrome 打印结果击垮,最终回过头来向代码方面探索,最终解决如下:
目前问题定位结论是
display:flex引起的
1  | <style type="text/css">  | 
初步结论(待进一步探索)
- 这些割字问题跟flex布局有关
 - 跟display非block有关,同时会影响print-break-*的结果
 
最后更新: 2022年03月02日 03:32
原始链接: http://rawbin-.github.io/cross-platform/nodejs/2018-08-21-node-print-pdf-problem/